package com.example.flashsales.service;

import com.example.flashsales.entity.dto.OrderDto;
import com.example.flashsales.entity.pojo.OrderDetails;
import com.example.flashsales.entity.vo.GoodsVo;
import com.example.flashsales.entity.vo.OrdersVo;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface OrderService {

    //添加一个订单
    boolean addOrder(OrderDto orderDto);

    //用户查看自己的订单
    List<OrdersVo> viewOrders(long userId,int page,int num);

    //用户按时间查看自己的订单
    List<OrdersVo> viewOrdersByTime(long userId, Date qDate,Date hDate,int page,int num);

    //修改订单状态
    boolean updateOrderState(long orderId,int state);

    //TODO 商家修改订单状态为到达小店（没有写通知用户）
    boolean updateOrderByArrive(long orderId);

    //店家查看自己的订单(全部)
    List<OrdersVo> viewStoreOrder(long storeId,int page,int num);

    //店家按时间查看自己的订单
    List<OrdersVo> viewStoreOrderByTime(long storeId,int page,int num,Date qDate,Date hDate);

    //根据订单id获取订单
    List<OrdersVo> viewOrder(long orderId);

    //根据用户id获取订单的id集合
    List<Integer> viewOrderIdByUser(long userId);

    //修改订单信息 (订单id，退款金额)
    boolean updateOrder(long orderId, Map<Long,Double> map);

    //查询会员的订单总量
    Integer viewUserOrderCount(long userId);

    //看当天的订单
    List<OrdersVo> viewAllOrderByDay(Integer num,Integer page);

    //查看当天各种商品的总重量
    List<GoodsVo> viewGoodsWeight();

    //修改订单的支付金额与支付方式
    boolean updateMoneyAndMethod(long orderId,int method,double money);


    //查看店家订单的总数
    long viewStoreOrderCount(long storeId);

    //用户按时间查看订单的总数
    Integer viewUserOrderCountByTime(long userId, Date qDate, Date hDate);

    //商家按时间查看订单总数
    long viewStoreOrderCountByTime(long id, Date qDate, Date hDate);

    //删除超时订单
    List<Long> delete();


    //取消订单
    boolean cancelOrder(long orderId);

    //查看所有订单
    Map<String,Object> viewAllOrder(int page, int num);

    //按时间类型查看订单
    Map<String,Object> viewAllOrderByStateAndTime(int page, int num, Date qDate, Date hDate, int state);

    //查看当天订单数
    Integer vieOrderDayCount();

    //查看所有未分拣
    List<OrderDetails> viewAllDetails(Integer page, Integer num);
}
